###########
#	Makefile - "La constructora"
#	@version: 3.0.0
#

# VARIABLES
CXX=g++
CXXFLAGS=		## flags del compilador: Wall para "warnings all"
TEMPFLAGS=		 -Wall 
TESTER=valgrind
TESTERFLAGS=

STDERR =
LOG=no
LOGFILE= 

EMATRIZ=
ECELDA=  
EMALLA = 

#Directorios:
MATRIZ= matriz/
CELDA = celda/
MALLA = malla/
DUPLA = dupla/
METRICA = metrica/
TESTER = tester/

## targets:

## decidi que por defecto fuera debug
ifeq ($(DEBUG),no)
	CXXFLAGS = $(TEMPFLAGS)
else
	CXXFLAGS = $(TEMPFLAGS) -g
endif

ifeq ($(LOG),yes)
	STDERR=2>
	LOGFILE=error.log
	EMATRIZ= $(STDERR) $(MATRIZ)$(LOGFILE)
	EMALLA = $(STDERR) $(MALLA)$(LOGFILE)
	EMETRICA= $(STDERR) $(METRICA)$(LOGFILE)
	EDUPLA= $(STDERR) $(DUPLA)$(LOGFILE)
	ECELDA= $(STDERR) $(CELDA)$(LOGFILE)
endif


## help

help:
	@echo '**************************************************************************************************'
	@echo 'MODO DE USO '
	@echo ' '
	@echo '		make nombreflag=yes/no '
	@echo 'donde nombreflag puede ser '
	@echo '		DEBUG que pone -g en las opciones del g++ (debugging symbols) '
	@echo '		LOG que pone la salida del stderr del g++ en un "error.log" dentro de la carpeta del prog. '
	@echo '(este último comando puede tirar algún "make*** error" pero igual hace el output al error.log'
	@echo ' '
	@echo ' '
	@echo 'Ahora se hace make "nombreModulo" y no make "nombreModulo-main" '
	@echo 'ej: '
	@echo '		make module '
	@echo '		make module DEBUG=no LOG=yes '
	@echo ' '
	@echo ' '
	@echo 'versión 2.0 '
	@echo '**************************************************************************************************** '
	
matrix: $(MATRIZ)matriz.cpp $(MATRIZ)matriz.h
	$(CXX) $(CXXFLAGS) -o $(MATRIZ)matriz $(MATRIZ)matriz.cpp $(EMATRIZ)

cell: $(CELDA)celda.cpp $(CELDA)celda.h
	$(CXX) $(CXXFLAGS) -o $(CELDA)celda $(CELDA)celda.cpp  $(ECELDA)

mesh: $(MALLA)malla.cpp $(MALLA)malla.h cell matrix coord
	$(CXX) $(CXXFLAGS) -o $(MALLA)malla $(MALLA)malla.cpp  $(EMALLA)
	
metric: $(METRICA)metrica.cpp $(METRICA)metrica.h mesh
	$(CXX) $(CXXFLAGS) -o $(METRICA)metrica $(METRICA)metrica.cpp  $(EMETRICA)

coord: $(DUPLA)dupla.cpp $(DUPLA)dupla.h
	$(CXX) $(CXXFLAGS) -o $(DUPLA)dupla $(DUPLA)dupla.cpp  $(EDUPLA)
	
testo: $(TESTER)tester.cpp $(TESTER)tester.h
	$(CXX)  $(CXXFLAGS) -o $(TESTER)tester $(TESTER)tester.cpp

install: coord matrix cell mesh metric testo

test :
	$(TESTER) $(TESTERFLAGS) $(MATRIZ)matriz
	$(TESTER) $(TESTERFLAGS) $(MALLA)malla
	$(TESTER) $(TESTERFLAGS) $(CELDA)celda
	$(TESTER) $(TESTERFLAGS) $(DUPLA)dupla
	$(TESTER) $(TESTERFLAGS) $(METRICA)metrica

run:
	$(MATRIZ)matriz
	$(MALLA)malla
	$(CELDA)celda
	$(DUPLA)dupla
	$(METRICA)metrica

